package ar.com.siavu;

import java.util.GregorianCalendar;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import ar.com.siavu.controller.configuration.HibernateUtil;
import ar.com.siavu.domain.Posta;
import ar.com.siavu.domain.Vuelo;
import junit.framework.TestCase;

public class GenerateVuelosTotales extends TestCase {

	public void testGenerateTotales(){
		
		Session s= HibernateUtil.getSessionFactory().getCurrentSession();
		Transaction t= s.beginTransaction();
		
		
		Query q=s.createQuery("select v from ar.com.siavu.domain.Vuelo v where v.VueloID not in (select p.VueloIda.VueloID from Posta p) " +
				" and v.VueloID not in (select p.VueloVuelta.VueloID from Posta p) ");
		List<Vuelo> vuelos= q.list();
		for (Vuelo vuelo : vuelos) {
			s.delete(vuelo);
		}
		
		q= s.createQuery("select p from Posta p");
		List<Posta> postasSeptiembre= q.list();
		for (int i = 1; i < 4; i++) {


			for (Posta posta : postasSeptiembre) {
				Vuelo ida= posta.getVueloIda();
				Vuelo vuelta= posta.getVueloVuelta();
				Vuelo nuevaIda=new Vuelo();
				nuevaIda.setAvion(ida.getAvion());
				nuevaIda.setCiudadDestino(ida.getCiudadDestino());
				nuevaIda.setCiudadOrigen(ida.getCiudadOrigen());
				nuevaIda.setNumero(ida.getNumero());
				GregorianCalendar gcIdaSalida= new GregorianCalendar();
				gcIdaSalida.setTime(ida.getFechaSalida());
				gcIdaSalida.add(GregorianCalendar.MONTH, i);
				GregorianCalendar gcIdaLlegada= new GregorianCalendar();
				gcIdaLlegada.setTime(ida.getFechaLlegada());
				gcIdaLlegada.add(GregorianCalendar.MONTH, i);
				nuevaIda.setFechaSalida(gcIdaSalida.getTime());
				nuevaIda.setFechaLlegada(gcIdaLlegada.getTime());

				Vuelo nuevaVuelta=new Vuelo();
				nuevaVuelta.setAvion(vuelta.getAvion());
				nuevaVuelta.setCiudadDestino(vuelta.getCiudadDestino());
				nuevaVuelta.setCiudadOrigen(vuelta.getCiudadOrigen());
				nuevaVuelta.setNumero(vuelta.getNumero());
				GregorianCalendar gcVueltaSalida= new GregorianCalendar();
				gcVueltaSalida.setTime(vuelta.getFechaSalida());
				gcVueltaSalida.add(GregorianCalendar.MONTH, i);
				GregorianCalendar gcVueltaLlegada= new GregorianCalendar();
				gcVueltaLlegada.setTime(vuelta.getFechaLlegada());
				gcVueltaLlegada.add(GregorianCalendar.MONTH, i);
				nuevaVuelta.setFechaSalida(gcVueltaSalida.getTime());
				nuevaVuelta.setFechaLlegada(gcVueltaLlegada.getTime());

				Posta p= new Posta();
				p.setCantidadAuxiliaresSubscriptos(posta.getCantidadAuxiliaresSubscriptos());
				p.setCantidadComisariosSubscriptos(posta.getCantidadComisariosSubscriptos());
				p.setCantidadJefesCabinaSubscriptos(posta.getCantidadJefesCabinaSubscriptos());
				p.setNombre(posta.getNombre());
				p.setTipoPosta(posta.getTipoPosta());
				p.setVueloIda(nuevaIda);
				p.setVueloVuelta(nuevaVuelta);

				s.save(nuevaIda);
				s.save(nuevaVuelta);
				s.save(p);
			}
		}
		t.commit();
	}
}


